Brian Durán

Tarea: Sesión 4 y 5


I Parte


  1. Sea \(P=(2,3)\), \(Q=(5,2)\), \(R=(2,-5)\) y \(S=(1,-2)\). Calcule \(proy_{\vec{PQ}}\vec{RS}\).

\(\vec{PQ}\)

rr q <- c(5,2) p <- c(2,3) pq <- q - p pq

[1]  3 -1

\(\vec{RS}\)

rr r <- c(2,-5) s <- c(1,-2) rs <- s - r rs

[1] -1  3


\(proy_{\vec{PQ}}\vec{RS}\)

rr

proy <- project(rs, pq)

fractions(proy)

[1] -9/5  3/5


  1. Sea \(u = (-2,1,6)\) y \(v = (2,4,5)\), comprueba que el vector \(w\) dado por \(w = u - \frac{u \cdot v}{\|v\|^2} v\) Es un vector ortogonal con \(v\)

Calculamos:

\(u \cdot v\)

rr u <- c(-2,1,6) v <- c(2,4,5) sum(u*v)

[1] 30

\({\|v\|^2}\)

rr

v2 <- norm(v, type=\2)^2 v2

[1] 45

\(w = u - \frac{u \cdot v}{\|v\|^2} v\)

rr

prod_punto_u_v = sum(u*v)

w = u - ((prod_punto_u_v / v2) * v)

w = fractions(w)

sum(w*v)

[1] 0

rr subspace(as.matrix(w),as.matrix(v))

[1] 1.570796

rr 180*subspace(as.matrix(w),as.matrix(v))/pi

[1] 90

\(W _{\bot } V ?\)

w es ortogonal con v, ya que la múltiplicación entre ellos es igual a cero. Además de que el ángulo que los separa es igual a \(\pi\ /2\)

  1. Sean \(A=(3,0,0)\), \(B=(1,0,2)\), \(C=(2,3,0)\) puntos en el espacio (\(R^3\)).

Con estos puntos:

  1. Determine si el triángulo \(ABC\) es rectángulo, obtusángulo o acutángulo.

rr a <- c(3,0,0) b <- c(1,0,2) c <- c(2,3,0)

ab <- b-a bc <- c-b ca <- a-c

180*subspace(as.matrix(ab), as.matrix(bc))/pi

[1] 55.46242

rr 180*subspace(as.matrix(bc), as.matrix(ca))/pi

[1] 47.45855

rr 180*subspace(as.matrix(ab), as.matrix(ca))/pi

[1] 77.07903

Respuesta: El triángulo es acutángulo, ya que todos sus ángulos se encuentran entre 0 y 90 grados.

  1. Determine el perímetro del triángulo \(ABC\)

rr norma_ab <- norm(ab, type=\2) norma_bc <- norm(bc, type=\2) norma_ca <- norm(ca, type=\2)

perimetro <- norma_ab + norma_bc + norma_ca perimetro

[1] 9.732362
  1. Determine el área del triángulo ABC

rr semiperimetro <- perimetro / 2

Por formula de Héron

area = sqrt(semiperimetro * (semiperimetro - norma_ab) * (semiperimetro - norma_bc) * (semiperimetro - norma_ca))

area

[1] 4.358899


II Parte


  1. Compruebe que la matriz P, es ortogonal:

rr p <- matrix(c(1/2, 1/2, 1/2, 1/2, (1/sqrt(2)), -(1/sqrt(2)), 0, 0, (1/sqrt(6)), (1/sqrt(6)), -(2/sqrt(6)), 0, (1/(2sqrt(3))), (1/(2sqrt(3))), (1/(2sqrt(3))), -(3/(2sqrt(3)))), nrow=4, ncol=4, byrow=TRUE)

matriz_p <- fractions(p)

matriz_p

     [,1]           [,2]           [,3]           [,4]          
[1,]            1/2            1/2            1/2            1/2
[2,]      2378/3363     -5741/8119              0              0
[3,]    19402/47525    19402/47525  -86329/105731              0
[4,]   75658/262087   75658/262087   75658/262087 -489061/564719

rr p_inversa <- solve(matriz_p)

fractions(p_inversa)

     [,1]           [,2]           [,3]           [,4]          
[1,]            1/2      2378/3363    19402/47525   75658/262087
[2,]            1/2     -5741/8119    19402/47525   75658/262087
[3,]            1/2              0  -86329/105731   75658/262087
[4,]            1/2              0              0 -489061/564719

rr p_transpuesta <- t(p)

fractions(p_transpuesta)

     [,1]           [,2]           [,3]           [,4]          
[1,]            1/2      2378/3363    19402/47525   75658/262087
[2,]            1/2     -5741/8119    19402/47525   75658/262087
[3,]            1/2              0  -86329/105731   75658/262087
[4,]            1/2              0              0 -489061/564719

La matriz P es ortogonal puesto que su inversa y su transpuesta son iguales.

  1. Demuestre que A es indempotente.

rr a <- matrix(c(2, -2, -4, -1, 3, 4, 1, -2, -3), 3, 3, byrow=TRUE)

a

     [,1] [,2] [,3]
[1,]    2   -2   -4
[2,]   -1    3    4
[3,]    1   -2   -3

rr a%*%a

     [,1] [,2] [,3]
[1,]    2   -2   -4
[2,]   -1    3    4
[3,]    1   -2   -3

La matriz A es idempotente puesto que es igual a ella misma al cuadrado.

  1. Determine la composición \(f(m)\)

rr m <- matrix(c(3/2, -5/2, 2/3, -1/3), 2, 2, byrow=TRUE)

fractions(m)

     [,1] [,2]
[1,]  3/2 -5/2
[2,]  2/3 -1/3

rr m3 <- m%%m%%m

m2 <- m%*%m

fx = 6m3 + 3m2 - m

fractions(fx)

     [,1]   [,2]  
[1,]  -37/6  -55/6
[2,]   22/9 -116/9
  1. Encuentre la matriz inversa y el determinante de cada una de las siguientes matrices:

rr

a <- matrix(c(1, 2, 3, 2, 5, 7, -2, -4, -5), 3, 3, byrow=TRUE)

solve(a)

     [,1] [,2] [,3]
[1,]    3   -2   -1
[2,]   -4    1   -1
[3,]    2    0    1

rr det(a)

[1] 1

rr b <- matrix(c(3, -2, -1, -4, 1, -1, 2, 0, 1), 3, 3, byrow=TRUE)

solve(b)

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    5    7
[3,]   -2   -4   -5

rr det(b)

[1] 1

rr c <- matrix(c(0, 2, 1, 1, 3, -1, -1, 1, 2), 3, 3, byrow=TRUE)

fractions(solve(c))

     [,1] [,2] [,3]
[1,]  7/2 -3/2 -5/2
[2,] -1/2  1/2  1/2

La última matriz no tiene inversa puesto que el determinante es cero, es decir la matriz es singular o invertible.

Que relación existe entre las matrices que poseen inversas y el valor de su determinante? Sug: revisar la teoría vista en clase.
Cuando una matriz posee inversa, se puede asumir que su determinante es mayor a cero.


  1. ¿Cómo se propaga una enfermedad contagiosa?. Suponga que un grupo de 4 individuos que llamaremos \(I_{1}, I_{2}, I_{3}, I_{4}\), han contraído una enfermedad.

Este grupo entra en contacto con 6 personas de un segundo grupo: \(P_{1}, P_{2}, P_{3}, P_{4}, P_{5}, P_{6}\). Este tipo de contactos se llaman directos y se pueden representar en una matriz de 4 x 6, como la que se muestra a continuación:

Note que la forma de construir dicha matriz es, colocando un 1 si una persona del primer grupo (contagiados) entra en contacto con alguna persona del segundo grupo.

Llamemos \(A\) a esta matriz de contactos Primer Contacto Directo:

Ahora suponga que las 6 personas del grupo 2 entró en contacto directo con un tercer grupo de cinco personas \(M_{1}, M_{2}, M_{3}, M_{4}, M_{5}, M_{6}\) de la siguiente manera:

Llamamos \(B\) a esta segunda matriz de contacto:


La lógica es igual que en el caso anterior, 1 significa que un individuo del segundo grupo estuvo en contacto con un individuo del tercer grupo. Los contactos indirectos o de segundo orden, se pueden dar entre individuos del primer grupo con individuos del tercer grupo, esto es, que una persona del grupo 3, puede ser contagiada por alguien del grupo 2 que a su vez fue contagiada por alguien del grupo 1. A manera de ejemplo, note que las posiciones \(a_{24}=1\ y \ b_{45}=1\), con esto, se ve que indirectamente la quinta persona del grupo 3, tuvo contacto con una persona del grupo 1 a través de la cuarta persona del grupo 2, así:


Con respecto al caso anterior, realice los siguiente:

  1. Calcule una nueva matriz \(C\), tal que \(C=A \cdot B\) (Tome en cuenta que el producto es matricial, al trabajarlo en R).

rr

a_encabezados = list(c(1, 2, 3, 4), c(1, 2, 3, 4, 5, 6))

a <- matrix(c(0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1), 4, 6, byrow=TRUE, dimnames=a_encabezados)

a

   P1 P2 P3 P4 P5 P6
I1  0  1  0  0  1  0
I2  1  0  0  1  0  1
I3  0  0  0  1  1  0
I4  1  0  0  0  0  1

rr b_encabezados = list(c(1, 2, 3, 4, 5, 6), c(1, 2, 3, 4, 5))

b <- matrix(c(0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0), 6, 5, byrow=TRUE, dimnames=b_encabezados) b

   M1 M2 M3 M4 M5
P1  0  0  1  0  1
P2  0  0  0  1  0
P3  0  1  0  0  0
P4  1  0  0  0  1
P5  0  0  0  1  0
P6  0  0  1  0  0

rr c <- a%*%b c

   M1 M2 M3 M4 M5
I1  0  0  0  2  0
I2  1  0  2  0  2
I3  1  0  0  1  1
I4  0  0  2  0  1
  1. ¿Cuáles grupos de individuos (Grupo 1, 2 o 3) están quedando representados en \(C\)?, ¿quiénes están representados en las filas y quiénes en las columnas?

En la matriz \(C\) se están representanto los individuos de los tres grupos, ya que se demuestran los contactos directos e indirectos. Las filas representan a los individuos del grupo 1 (\(I\)) y la sumatoria de la fila representa los contactos indirectos que tuvo el individuo \(I_n\) con miembros del grupo \(M\) a través de miembros del grupo \(P\). Las columnas representan a los miembros del grupo 3 (\(M\)) y la sumatoria de la columna la cantidad total de contactos indirectos que tuvo el individuo (\(M_n\)) con individuos del grupo \(I\) a través de \(P\).

  1. Tome la fila 2 de \(C\) e interprétela (haga la extracción de esta usando un comando apropiado en R).

rr c[2,]

M1 M2 M3 M4 M5 
 1  0  2  0  2 

El individuo \(I_{2}\) fue la persona que más contagio a miembros del grupo \(M\) de manera indirecta.

  1. Tome la columna 2 y 5 de \(C\) e interprételas (Use comandos apropiados en R para la extracción)

rr c[,2]

I1 I2 I3 I4 
 0  0  0  0 

El individuo \(M_{2}\) no tuvo contacto con algún \(P\) que tuviera contacto con algún \(I\). Por lo tanto \(M_{2}\) no fue contagiado.

rr c[,5]

I1 I2 I3 I4 
 0  2  1  1 

El individuo \(M_{5}\) fue el miembro del grupo 3 que más contactos indirectos tuvo con miembros del grupo 1 \(I\).

  1. Interprete la posición \(C_{43}\) (Extraiga la entrada, usando el comando apropiado en R).

rr c[4,3]

[1] 2

El individuo \(I_4\) tuvo 2 contactos indirectos con el miembro \(M_3\) a través de 2 miembros del grupo 2 (\(P\))

 


Autor Brian Duran

 

LS0tDQpvdXRwdXQ6DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KLmluZGVudCB7DQogbWFyZ2luLWxlZnQ6IDMwcHg7DQp9DQpgYGANCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0NCmxpYnJhcnkocHJhY21hKQ0KbGlicmFyeShtb3NhaWMpDQpsaWJyYXJ5KE1BU1MpDQpgYGANCg0KIyMjIEJyaWFuIER1csOhbg0KIVtdKC4uL2xvZ29fY2llbmNpYV9kZV9kYXRvcy5wbmcpDQoNCjxoMT48Y2VudGVyPiBUYXJlYTogU2VzacOzbiA0IHkgNSA8L2NlbnRlcj48L2gxPg0KDQo8L2JyPg0KDQojIyMjIEkgUGFydGUNCg0KPC9icj4NCg0KMS4gU2VhICRQPSgyLDMpJCwgJFE9KDUsMikkLCAkUj0oMiwtNSkkIHkgJFM9KDEsLTIpJC4gQ2FsY3VsZSAkcHJveV97XHZlY3tQUX19XHZlY3tSU30kLg0KDQogICRcdmVje1BRfSQNCg0KYGBge3IsIGNsYXNzLnNvdXJjZT0iaW5kZW50IiwgY2xhc3Mub3V0cHV0PSJpbmRlbnQifQ0KcSA8LSBjKDUsMikNCnAgPC0gYygyLDMpDQpwcSA8LSBxIC0gcA0KcHENCg0KYGBgDQoNCiAgJFx2ZWN7UlN9JA0KDQpgYGB7ciwgY2xhc3Muc291cmNlPSJpbmRlbnQiLCBjbGFzcy5vdXRwdXQ9ImluZGVudCJ9DQpyIDwtIGMoMiwtNSkNCnMgPC0gYygxLC0yKQ0KcnMgPC0gcyAtIHINCnJzDQoNCmBgYA0KDQo8L2JyPg0KDQokcHJveV97XHZlY3tQUX19XHZlY3tSU30kDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCg0KcHJveSA8LSBwcm9qZWN0KHJzLCBwcSkNCg0KZnJhY3Rpb25zKHByb3kpDQoNCmBgYA0KDQo8L2JyPg0KDQoyLiBTZWEgJHUgPSAoLTIsMSw2KSQgeSAkdiA9ICgyLDQsNSkkLCBjb21wcnVlYmEgcXVlIGVsIHZlY3RvciAkdyQgZGFkbyBwb3IgJHcgPSB1IC0gXGZyYWN7dSBcY2RvdCB2fXtcfHZcfF4yfSB2JA0KRXMgdW4gdmVjdG9yIG9ydG9nb25hbCBjb24gJHYkDQoNCkNhbGN1bGFtb3M6DQoNCiR1IFxjZG90IHYkDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCnUgPC0gYygtMiwxLDYpDQp2IDwtIGMoMiw0LDUpDQpzdW0odSp2KQ0KYGBgDQoNCiR7XHx2XHxeMn0kDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCg0KdjIgPC0gbm9ybSh2LCB0eXBlPSIyIileMg0KdjINCmBgYA0KDQokdyA9IHUgLSBcZnJhY3t1IFxjZG90IHZ9e1x8dlx8XjJ9IHYkDQoNCg0KYGBge3IsIGNsYXNzLnNvdXJjZT0iaW5kZW50IiwgY2xhc3Mub3V0cHV0PSJpbmRlbnQifQ0KDQpwcm9kX3B1bnRvX3VfdiA9IHN1bSh1KnYpDQoNCncgPSB1IC0gKChwcm9kX3B1bnRvX3VfdiAvIHYyKSAqIHYpDQoNCncgPSBmcmFjdGlvbnModykNCg0Kc3VtKHcqdikNCg0Kc3Vic3BhY2UoYXMubWF0cml4KHcpLGFzLm1hdHJpeCh2KSkNCg0KMTgwKnN1YnNwYWNlKGFzLm1hdHJpeCh3KSxhcy5tYXRyaXgodikpL3BpDQoNCmBgYA0KDQokVyBfe1xib3QgfSBWID8kDQoNCncgZXMgb3J0b2dvbmFsIGNvbiB2LCB5YSBxdWUgbGEgbcO6bHRpcGxpY2FjacOzbiBlbnRyZSBlbGxvcyBlcyBpZ3VhbCBhIGNlcm8uIEFkZW3DoXMgZGUgcXVlIGVsIMOhbmd1bG8gcXVlIGxvcyBzZXBhcmEgZXMgaWd1YWwgYSAkXHBpXCAvMiQNCg0KDQoNCjMuIFNlYW4gJEE9KDMsMCwwKSQsICRCPSgxLDAsMikkLCAkQz0oMiwzLDApJCBwdW50b3MgZW4gZWwgZXNwYWNpbyAoJFJeMyQpLiANCg0KQ29uIGVzdG9zIHB1bnRvczoNCg0KICBhLiBEZXRlcm1pbmUgc2kgZWwgdHJpw6FuZ3VsbyAkQUJDJCBlcyByZWN0w6FuZ3Vsbywgb2J0dXPDoW5ndWxvIG8gYWN1dMOhbmd1bG8uDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCmEgPC0gYygzLDAsMCkNCmIgPC0gYygxLDAsMikNCmMgPC0gYygyLDMsMCkNCg0KYWIgPC0gYi1hDQpiYyA8LSBjLWINCmNhIDwtIGEtYw0KDQoxODAqc3Vic3BhY2UoYXMubWF0cml4KGFiKSwgYXMubWF0cml4KGJjKSkvcGkNCjE4MCpzdWJzcGFjZShhcy5tYXRyaXgoYmMpLCBhcy5tYXRyaXgoY2EpKS9waQ0KMTgwKnN1YnNwYWNlKGFzLm1hdHJpeChhYiksIGFzLm1hdHJpeChjYSkpL3BpDQoNCmBgYA0KDQoNClJlc3B1ZXN0YTogRWwgdHJpw6FuZ3VsbyBlcyBhY3V0w6FuZ3VsbywgeWEgcXVlIHRvZG9zIHN1cyDDoW5ndWxvcyBzZSBlbmN1ZW50cmFuIGVudHJlIDAgeSA5MCBncmFkb3MuDQoNCg0KYi4gRGV0ZXJtaW5lIGVsIHBlcsOtbWV0cm8gZGVsIHRyacOhbmd1bG8gJEFCQyQNCg0KYGBge3IsIGNsYXNzLnNvdXJjZT0iaW5kZW50IiwgY2xhc3Mub3V0cHV0PSJpbmRlbnQifQ0Kbm9ybWFfYWIgPC0gbm9ybShhYiwgdHlwZT0iMiIpDQpub3JtYV9iYyA8LSBub3JtKGJjLCB0eXBlPSIyIikNCm5vcm1hX2NhIDwtIG5vcm0oY2EsIHR5cGU9IjIiKQ0KDQpwZXJpbWV0cm8gPC0gbm9ybWFfYWIgKyBub3JtYV9iYyArIG5vcm1hX2NhDQpwZXJpbWV0cm8NCmBgYA0KDQoNCmMuIERldGVybWluZSBlbCDDoXJlYSBkZWwgdHJpw6FuZ3VsbyBBQkMNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCnNlbWlwZXJpbWV0cm8gPC0gcGVyaW1ldHJvIC8gMg0KDQojIFBvciBmb3JtdWxhIGRlIEjDqXJvbg0KYXJlYSA9IHNxcnQoc2VtaXBlcmltZXRybyAqIChzZW1pcGVyaW1ldHJvIC0gbm9ybWFfYWIpICogKHNlbWlwZXJpbWV0cm8gLSBub3JtYV9iYykgKiAoc2VtaXBlcmltZXRybyAtIG5vcm1hX2NhKSkNCg0KYXJlYQ0KDQpgYGANCg0KDQo8L2JyPg0KDQojIyMjIElJIFBhcnRlDQoNCjwvYnI+DQoNCg0KMS4gQ29tcHJ1ZWJlIHF1ZSBsYSBtYXRyaXogUCwgZXMgb3J0b2dvbmFsOg0KDQpgYGB7ciwgY2xhc3Muc291cmNlPSJpbmRlbnQiLCBjbGFzcy5vdXRwdXQ9ImluZGVudCJ9DQpwIDwtIG1hdHJpeChjKDEvMiwgMS8yLCAxLzIsIDEvMiwgDQogICAgICAgICAgICAgICgxL3NxcnQoMikpLCAtKDEvc3FydCgyKSksIDAsIDAsIA0KICAgICAgICAgICAgICAoMS9zcXJ0KDYpKSwgKDEvc3FydCg2KSksIC0oMi9zcXJ0KDYpKSwgMCwgDQogICAgICAgICAgICAgICgxLygyKnNxcnQoMykpKSwgKDEvKDIqc3FydCgzKSkpLCAoMS8oMipzcXJ0KDMpKSksIC0oMy8oMipzcXJ0KDMpKSkpLCANCiAgICAgICAgICAgICAgbnJvdz00LCBuY29sPTQsIGJ5cm93PVRSVUUpDQoNCm1hdHJpel9wIDwtIGZyYWN0aW9ucyhwKQ0KDQptYXRyaXpfcA0KDQoNCnBfaW52ZXJzYSA8LSBzb2x2ZShtYXRyaXpfcCkNCg0KZnJhY3Rpb25zKHBfaW52ZXJzYSkNCg0KDQpwX3RyYW5zcHVlc3RhIDwtIHQocCkNCg0KZnJhY3Rpb25zKHBfdHJhbnNwdWVzdGEpDQoNCmBgYA0KDQpMYSBtYXRyaXogUCBlcyBvcnRvZ29uYWwgcHVlc3RvIHF1ZSBzdSBpbnZlcnNhIHkgc3UgdHJhbnNwdWVzdGEgc29uIGlndWFsZXMuDQoNCg0KMi4gRGVtdWVzdHJlIHF1ZSBBIGVzIGluZGVtcG90ZW50ZS4NCg0KDQpgYGB7ciwgY2xhc3Muc291cmNlPSJpbmRlbnQiLCBjbGFzcy5vdXRwdXQ9ImluZGVudCJ9DQphIDwtIG1hdHJpeChjKDIsIC0yLCAtNCwgDQogICAgICAgICAgICAgIC0xLCAzLCA0LA0KICAgICAgICAgICAgICAxLCAtMiwgLTMpLCANCiAgICAgICAgICAgICAgMywgMywgYnlyb3c9VFJVRSkNCg0KDQphDQoNCmElKiVhDQoNCmBgYA0KDQoNCkxhIG1hdHJpeiBBIGVzIGlkZW1wb3RlbnRlIHB1ZXN0byBxdWUgZXMgaWd1YWwgYSBlbGxhIG1pc21hIGFsIGN1YWRyYWRvLg0KDQoNCjMuIERldGVybWluZSBsYSBjb21wb3NpY2nDs24gJGYobSkkDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCm0gPC0gbWF0cml4KGMoMy8yLCAtNS8yLCANCiAgICAgICAgICAgICAgMi8zLCAtMS8zKSwgDQogICAgICAgICAgICAgIDIsIDIsIGJ5cm93PVRSVUUpDQoNCmZyYWN0aW9ucyhtKQ0KDQptMyA8LSBtJSolbSUqJW0NCg0KbTIgPC0gbSUqJW0NCg0KZnggPSA2Km0zICsgMyptMiAtIG0NCg0KZnJhY3Rpb25zKGZ4KQ0KDQpgYGANCg0KDQoNCjQuIEVuY3VlbnRyZSBsYSBtYXRyaXogaW52ZXJzYSB5IGVsIGRldGVybWluYW50ZSBkZSBjYWRhIHVuYSBkZSBsYXMgc2lndWllbnRlcyBtYXRyaWNlczoNCg0KYGBge3IsIGNsYXNzLnNvdXJjZT0iaW5kZW50IiwgY2xhc3Mub3V0cHV0PSJpbmRlbnQifQ0KDQphIDwtIG1hdHJpeChjKDEsIDIsIDMsIA0KICAgICAgICAgICAgICAyLCA1LCA3LA0KICAgICAgICAgICAgICAtMiwgLTQsIC01KSwgDQogICAgICAgICAgICAgIDMsIDMsIGJ5cm93PVRSVUUpDQoNCnNvbHZlKGEpDQpkZXQoYSkNCg0KYiA8LSBtYXRyaXgoYygzLCAtMiwgLTEsIA0KICAgICAgICAgICAgICAtNCwgMSwgLTEsDQogICAgICAgICAgICAgIDIsIDAsIDEpLCANCiAgICAgICAgICAgICAgMywgMywgYnlyb3c9VFJVRSkNCg0Kc29sdmUoYikNCmRldChiKQ0KDQoNCmMgPC0gbWF0cml4KGMoMCwgMiwgMSwgDQogICAgICAgICAgICAgIDEsIDMsIC0xLA0KICAgICAgICAgICAgICAtMSwgMSwgMiksIA0KICAgICAgICAgICAgICAzLCAzLCBieXJvdz1UUlVFKQ0KDQpmcmFjdGlvbnMoc29sdmUoYykpDQpkZXQoYykNCg0KZCA8LSBtYXRyaXgoYygzLCA2LCA5LCANCiAgICAgICAgICAgICAgMiwgNSwgMSwNCiAgICAgICAgICAgICAgMSwgMSwgOCksIA0KICAgICAgICAgICAgICAzLCAzLCBieXJvdz1UUlVFKQ0KDQpkZXQoZCkNCg0KYGBgDQoNCkxhIMO6bHRpbWEgbWF0cml6IG5vIHRpZW5lIGludmVyc2EgcHVlc3RvIHF1ZSBlbCBkZXRlcm1pbmFudGUgZXMgY2VybywgZXMgZGVjaXIgbGEgbWF0cml6IGVzIHNpbmd1bGFyIG8gaW52ZXJ0aWJsZS4NCg0KDQpRdWUgcmVsYWNpw7NuIGV4aXN0ZSBlbnRyZSBsYXMgbWF0cmljZXMgcXVlIHBvc2VlbiBpbnZlcnNhcyB5IGVsIHZhbG9yIGRlIHN1IGRldGVybWluYW50ZT8gU3VnOiByZXZpc2FyIGxhIHRlb3LDrWEgdmlzdGEgZW4gY2xhc2UuDQo8L2JyPkN1YW5kbyB1bmEgbWF0cml6IHBvc2VlIGludmVyc2EsIHNlIHB1ZWRlIGFzdW1pciBxdWUgc3UgZGV0ZXJtaW5hbnRlIGVzIG1heW9yIGEgY2Vyby4NCg0KDQo8L2JyPg0KDQo1LiDCv0PDs21vIHNlIHByb3BhZ2EgdW5hIGVuZmVybWVkYWQgY29udGFnaW9zYT8uIFN1cG9uZ2EgcXVlIHVuIGdydXBvIGRlIDQgaW5kaXZpZHVvcyBxdWUgbGxhbWFyZW1vcyAkSV97MX0sIElfezJ9LCBJX3szfSwgSV97NH0kLCBoYW4gY29udHJhw61kbyB1bmEgZW5mZXJtZWRhZC4NCg0KRXN0ZSBncnVwbyBlbnRyYSBlbiBjb250YWN0byBjb24gNiBwZXJzb25hcyBkZSB1biBzZWd1bmRvIGdydXBvOiAkUF97MX0sIFBfezJ9LCBQX3szfSwgUF97NH0sIFBfezV9LCBQX3s2fSQuIEVzdGUgdGlwbyBkZSBjb250YWN0b3Mgc2UgbGxhbWFuIGRpcmVjdG9zIHkgc2UgcHVlZGVuIHJlcHJlc2VudGFyIGVuIHVuYSBtYXRyaXogZGUgNCB4IDYsIGNvbW8gbGEgcXVlIHNlIG11ZXN0cmEgYSBjb250aW51YWNpw7NuOg0KDQo8Y2VudGVyPiFbXShtYXRyaXpfY29udGFnaW8ucG5nKTwvY2VudGVyPg0KDQpOb3RlIHF1ZSBsYSBmb3JtYSBkZSBjb25zdHJ1aXIgZGljaGEgbWF0cml6IGVzLCBjb2xvY2FuZG8gdW4gMSBzaSB1bmEgcGVyc29uYSBkZWwgcHJpbWVyIGdydXBvIChjb250YWdpYWRvcykgZW50cmEgZW4gY29udGFjdG8gY29uIGFsZ3VuYSBwZXJzb25hIGRlbCBzZWd1bmRvIGdydXBvLg0KDQpMbGFtZW1vcyAkQSQgYSBlc3RhIG1hdHJpeiBkZSBjb250YWN0b3MgUHJpbWVyIENvbnRhY3RvIERpcmVjdG86DQoNCjxjZW50ZXI+IVtdKG1hdHJpel9hLnBuZyk8L2NlbnRlcj4NCg0KQWhvcmEgc3Vwb25nYSBxdWUgbGFzIDYgcGVyc29uYXMgZGVsIGdydXBvIDIgZW50csOzIGVuIGNvbnRhY3RvIGRpcmVjdG8gY29uIHVuIHRlcmNlciBncnVwbw0KZGUgY2luY28gcGVyc29uYXMgJE1fezF9LCBNX3syfSwgTV97M30sIE1fezR9LCBNX3s1fSwgTV97Nn0kIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6DQoNCjxjZW50ZXI+IVtdKG1hdHJpel9jb250YWdpb19pbmRpcmVjdG8ucG5nKTwvY2VudGVyPg0KDQpMbGFtYW1vcyAkQiQgYSBlc3RhIHNlZ3VuZGEgbWF0cml6IGRlIGNvbnRhY3RvOg0KDQo8Y2VudGVyPiFbXShtYXRyaXpfYi5wbmcpPC9jZW50ZXI+DQoNCjwvYnI+DQoNCkxhIGzDs2dpY2EgZXMgaWd1YWwgcXVlIGVuIGVsIGNhc28gYW50ZXJpb3IsIDEgc2lnbmlmaWNhIHF1ZSB1biBpbmRpdmlkdW8gZGVsIHNlZ3VuZG8gZ3J1cG8gZXN0dXZvIGVuIGNvbnRhY3RvIGNvbiB1biBpbmRpdmlkdW8gZGVsIHRlcmNlciBncnVwby4gTG9zIGNvbnRhY3RvcyBpbmRpcmVjdG9zIG8gZGUgc2VndW5kbyBvcmRlbiwgc2UgcHVlZGVuIGRhciBlbnRyZSBpbmRpdmlkdW9zIGRlbCBwcmltZXIgZ3J1cG8gY29uIGluZGl2aWR1b3MgZGVsIHRlcmNlciBncnVwbywgZXN0byBlcywgcXVlIHVuYSBwZXJzb25hIGRlbCBncnVwbyAzLCBwdWVkZSBzZXIgY29udGFnaWFkYSBwb3IgYWxndWllbiBkZWwgZ3J1cG8gMiBxdWUgYSBzdSB2ZXogZnVlIGNvbnRhZ2lhZGEgcG9yIGFsZ3VpZW4gZGVsIGdydXBvIDEuIEEgbWFuZXJhIGRlIGVqZW1wbG8sIG5vdGUgcXVlIGxhcyBwb3NpY2lvbmVzICRhX3syNH09MVwgeSBcIGJfezQ1fT0xJCwgY29uIGVzdG8sIHNlIHZlIHF1ZSBpbmRpcmVjdGFtZW50ZSBsYSBxdWludGEgcGVyc29uYSBkZWwgZ3J1cG8gMywgdHV2byBjb250YWN0byBjb24gdW5hIHBlcnNvbmEgZGVsIGdydXBvIDEgYSB0cmF2w6lzIGRlIGxhIGN1YXJ0YSBwZXJzb25hIGRlbCBncnVwbyAyLCBhc8OtOg0KDQo8Y2VudGVyPiFbXShhcnJvd3MucG5nKTwvY2VudGVyPg0KDQo8L2JyPg0KDQpDb24gcmVzcGVjdG8gYWwgY2FzbyBhbnRlcmlvciwgcmVhbGljZSBsb3Mgc2lndWllbnRlOg0KDQphLiBDYWxjdWxlIHVuYSBudWV2YSBtYXRyaXogJEMkLCB0YWwgcXVlICRDPUEgXGNkb3QgQiQgKFRvbWUgZW4gY3VlbnRhIHF1ZSBlbCBwcm9kdWN0byBlcyBtYXRyaWNpYWwsIGFsIHRyYWJhamFybG8gZW4gUikuDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCg0KYV9lbmNhYmV6YWRvcyA9IGxpc3QoYygiSTEiLCAiSTIiLCAiSTMiLCAiSTQiKSwgYygiUDEiLCAiUDIiLCAiUDMiLCAiUDQiLCAiUDUiLCAiUDYiKSkNCg0KYSA8LSBtYXRyaXgoYygwLCAxLCAwLCAwLCAxLCAwLA0KICAgICAgICAgICAgICAxLCAwLCAwLCAxLCAwLCAxLA0KICAgICAgICAgICAgICAwLCAwLCAwLCAxLCAxLCAwLA0KICAgICAgICAgICAgICAxLCAwLCAwLCAwLCAwLCAxKSwNCiAgICAgICAgICAgICAgNCwgNiwgYnlyb3c9VFJVRSwgZGltbmFtZXM9YV9lbmNhYmV6YWRvcykNCg0KYQ0KDQpiX2VuY2FiZXphZG9zID0gbGlzdChjKCJQMSIsICJQMiIsICJQMyIsICJQNCIsICJQNSIsICJQNiIpLCBjKCJNMSIsICJNMiIsICJNMyIsICJNNCIsICJNNSIpKQ0KDQpiIDwtIG1hdHJpeChjKDAsIDAsIDEsIDAsIDEsDQogICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAsDQogICAgICAgICAgICAgIDAsIDEsIDAsIDAsIDAsDQogICAgICAgICAgICAgIDEsIDAsIDAsIDAsIDEsDQogICAgICAgICAgICAgIDAsIDAsIDAsIDEsIDAsDQogICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDApLA0KICAgICAgICAgICAgICA2LCA1LCBieXJvdz1UUlVFLCBkaW1uYW1lcz1iX2VuY2FiZXphZG9zKQ0KYg0KDQpjIDwtIGElKiViDQpjDQoNCmBgYA0KDQpiLiDCv0N1w6FsZXMgZ3J1cG9zIGRlIGluZGl2aWR1b3MgKEdydXBvIDEsIDIgbyAzKSBlc3TDoW4gcXVlZGFuZG8gcmVwcmVzZW50YWRvcyBlbiAkQyQ/LCDCv3F1acOpbmVzIGVzdMOhbiByZXByZXNlbnRhZG9zIGVuIGxhcyBmaWxhcyB5IHF1acOpbmVzIGVuIGxhcyBjb2x1bW5hcz8NCg0KRW4gbGEgbWF0cml6ICRDJCBzZSBlc3TDoW4gcmVwcmVzZW50YW50byBsb3MgaW5kaXZpZHVvcyBkZSBsb3MgdHJlcyBncnVwb3MsIHlhIHF1ZSBzZSBkZW11ZXN0cmFuIGxvcyBjb250YWN0b3MgZGlyZWN0b3MgZSBpbmRpcmVjdG9zLiBMYXMgZmlsYXMgcmVwcmVzZW50YW4gYSBsb3MgaW5kaXZpZHVvcyBkZWwgZ3J1cG8gMSAoJEkkKSB5IGxhIHN1bWF0b3JpYSBkZSBsYSBmaWxhIHJlcHJlc2VudGEgbG9zIGNvbnRhY3RvcyBpbmRpcmVjdG9zIHF1ZSB0dXZvIGVsIGluZGl2aWR1byAkSV9uJCBjb24gbWllbWJyb3MgZGVsIGdydXBvICRNJCBhIHRyYXbDqXMgZGUgbWllbWJyb3MgZGVsIGdydXBvICRQJC4gTGFzIGNvbHVtbmFzIHJlcHJlc2VudGFuIGEgbG9zIG1pZW1icm9zIGRlbCBncnVwbyAzICgkTSQpIHkgbGEgc3VtYXRvcmlhIGRlIGxhIGNvbHVtbmEgbGEgY2FudGlkYWQgdG90YWwgZGUgY29udGFjdG9zIGluZGlyZWN0b3MgcXVlIHR1dm8gZWwgaW5kaXZpZHVvICgkTV9uJCkgY29uIGluZGl2aWR1b3MgZGVsIGdydXBvICRJJCBhIHRyYXbDqXMgZGUgJFAkLg0KDQoNCmMuIFRvbWUgbGEgZmlsYSAyIGRlICRDJCBlIGludGVycHLDqXRlbGEgKGhhZ2EgbGEgZXh0cmFjY2nDs24gZGUgZXN0YSB1c2FuZG8gdW4gY29tYW5kbyBhcHJvcGlhZG8gZW4gUikuDQpgYGB7ciwgY2xhc3Muc291cmNlPSJpbmRlbnQiLCBjbGFzcy5vdXRwdXQ9ImluZGVudCJ9DQpjWzIsXQ0KYGBgDQoNCkVsIGluZGl2aWR1byAkSV97Mn0kIGZ1ZSBsYSBwZXJzb25hIHF1ZSBtw6FzIGNvbnRhZ2lvIGEgbWllbWJyb3MgZGVsIGdydXBvICRNJCBkZSBtYW5lcmEgaW5kaXJlY3RhLg0KDQoNCmQuIFRvbWUgbGEgY29sdW1uYSAyIHkgNSBkZSAkQyQgZSBpbnRlcnByw6l0ZWxhcyAoVXNlIGNvbWFuZG9zIGFwcm9waWFkb3MgZW4gUiBwYXJhIGxhIGV4dHJhY2Npw7NuKQ0KDQpgYGB7ciwgY2xhc3Muc291cmNlPSJpbmRlbnQiLCBjbGFzcy5vdXRwdXQ9ImluZGVudCJ9DQpjWywyXQ0KYGBgDQoNCkVsIGluZGl2aWR1byAkTV97Mn0kIG5vIHR1dm8gY29udGFjdG8gY29uIGFsZ8O6biAkUCQgcXVlIHR1dmllcmEgY29udGFjdG8gY29uIGFsZ8O6biAkSSQuIFBvciBsbyB0YW50byAkTV97Mn0kIG5vIGZ1ZSBjb250YWdpYWRvLg0KDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCmNbLDVdDQpgYGANCg0KRWwgaW5kaXZpZHVvICRNX3s1fSQgZnVlIGVsIG1pZW1icm8gZGVsIGdydXBvIDMgcXVlIG3DoXMgY29udGFjdG9zIGluZGlyZWN0b3MgdHV2byBjb24gbWllbWJyb3MgZGVsIGdydXBvIDEgJEkkLg0KDQoNCmUuIEludGVycHJldGUgbGEgcG9zaWNpw7NuICRDX3s0M30kIChFeHRyYWlnYSBsYSBlbnRyYWRhLCB1c2FuZG8gZWwgY29tYW5kbyBhcHJvcGlhZG8gZW4gUikuDQoNCmBgYHtyLCBjbGFzcy5zb3VyY2U9ImluZGVudCIsIGNsYXNzLm91dHB1dD0iaW5kZW50In0NCmNbNCwzXQ0KYGBgDQoNCkVsIGluZGl2aWR1byAkSV80JCB0dXZvICoqMioqIGNvbnRhY3RvcyBpbmRpcmVjdG9zIGNvbiBlbCBtaWVtYnJvICRNXzMkIGEgdHJhdsOpcyBkZSAyIG1pZW1icm9zIGRlbCBncnVwbyAyICgkUCQpDQoNCg0KPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4NCjwhLS0NCkVzdGEgc2VjY2nDs24gZXMgc29sbyBwYXJhIGFncmVnYXIgZXN0aWxvcyB5IGVsZW1lbnRvcyANCnBlcnNvbmFsaXphZG9zIGFsIGh0bWwgZ2VuZXJhZG8gcG9yIHJTdHVkaW8gIA0KLS0+DQo8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPg0KDQombmJzcDsNCg0KPGhyIC8+DQo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+QXV0b3IgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2JkdXJhbnMiPkJyaWFuIER1cmFuPC9hPjwvcD4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM4MDgwODA7Ij48ZW0+YmR1cmFuMDM5M0BnbWFpbC5jb208L2VtPjwvc3Bhbj48L3A+DQoNCjwhLS0gQWRkIGljb24gbGlicmFyeSAtLT4NCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzQuNy4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyI+DQoNCjwhLS0gQWRkIGZvbnQgYXdlc29tZSBpY29ucyAtLT4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCiAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmR1cmFucy90ZWNfZGF0YV9zY2llbmNlX2NvdXJzZS90cmVlL21hc3Rlci9tYXRoZW1hdGljc19mb3JfZGF0YV9zY2llbmNlL3Nlc3Npb25fNF9hbmRfNV9ob21ld29yayIgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9hPg0KPC9wPg0KDQo8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmR1cmFucy90ZWNfZGF0YV9zY2llbmNlX2NvdXJzZS90cmVlL21hc3Rlci9tYXRoZW1hdGljc19mb3JfZGF0YV9zY2llbmNlL3Nlc3Npb25fNF9hbmRfNV9ob21ld29yayIgY2xhc3M9ImdpdGh1Yi1jb3JuZXIiIGFyaWEtbGFiZWw9IlZpZXcgc291cmNlIG9uIEdpdEh1YiI+PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCAyNTAgMjUwIiBzdHlsZT0iZmlsbDojMTUxNTEzOyBjb2xvcjojZmZmOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgYm9yZGVyOiAwOyByaWdodDogMDsiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMCwwIEwxMTUsMTE1IEwxMzAsMTE1IEwxNDIsMTQyIEwyNTAsMjUwIEwyNTAsMCBaIj48L3BhdGg+PHBhdGggZD0iTTEyOC4zLDEwOS4wIEMxMTMuOCw5OS43IDExOS4wLDg5LjYgMTE5LjAsODkuNiBDMTIyLjAsODIuNyAxMjAuNSw3OC42IDEyMC41LDc4LjYgQzExOS4yLDcyLjAgMTIzLjQsNzYuMyAxMjMuNCw3Ni4zIEMxMjcuMyw4MC45IDEyNS41LDg3LjMgMTI1LjUsODcuMyBDMTIyLjksOTcuNiAxMzAuNiwxMDEuOSAxMzQuNCwxMDMuMiIgZmlsbD0iY3VycmVudENvbG9yIiBzdHlsZT0idHJhbnNmb3JtLW9yaWdpbjogMTMwcHggMTA2cHg7IiBjbGFzcz0ib2N0by1hcm0iPjwvcGF0aD48cGF0aCBkPSJNMTE1LjAsMTE1LjAgQzExNC45LDExNS4xIDExOC43LDExNi41IDExOS44LDExNS40IEwxMzMuNywxMDEuNiBDMTM2LjksOTkuMiAxMzkuOSw5OC40IDE0Mi4yLDk4LjYgQzEzMy44LDg4LjAgMTI3LjUsNzQuNCAxNDMuOCw1OC4wIEMxNDguNSw1My40IDE1NC4wLDUxLjIgMTU5LjcsNTEuMCBDMTYwLjMsNDkuNCAxNjMuMiw0My42IDE3MS40LDQwLjEgQzE3MS40LDQwLjEgMTc2LjEsNDIuNSAxNzguOCw1Ni4yIEMxODMuMSw1OC42IDE4Ny4yLDYxLjggMTkwLjksNjUuNCBDMTk0LjUsNjkuMCAxOTcuNyw3My4yIDIwMC4xLDc3LjYgQzIxMy44LDgwLjIgMjE2LjMsODQuOSAyMTYuMyw4NC45IEMyMTIuNyw5My4xIDIwNi45LDk2LjAgMjA1LjQsOTYuNiBDMjA1LjEsMTAyLjQgMjAzLjAsMTA3LjggMTk4LjMsMTEyLjUgQzE4MS45LDEyOC45IDE2OC4zLDEyMi41IDE1Ny43LDExNC4xIEMxNTcuOSwxMTYuOSAxNTYuNywxMjAuOSAxNTIuNywxMjQuOSBMMTQxLjAsMTM2LjUgQzEzOS44LDEzNy43IDE0MS42LDE0MS45IDE0MS44LDE0MS44IFoiIGZpbGw9ImN1cnJlbnRDb2xvciIgY2xhc3M9Im9jdG8tYm9keSI+PC9wYXRoPjwvc3ZnPjwvYT48c3R5bGU+LmdpdGh1Yi1jb3JuZXI6aG92ZXIgLm9jdG8tYXJte2FuaW1hdGlvbjpvY3RvY2F0LXdhdmUgNTYwbXMgZWFzZS1pbi1vdXR9QGtleWZyYW1lcyBvY3RvY2F0LXdhdmV7MCUsMTAwJXt0cmFuc2Zvcm06cm90YXRlKDApfTIwJSw2MCV7dHJhbnNmb3JtOnJvdGF0ZSgtMjVkZWcpfTQwJSw4MCV7dHJhbnNmb3JtOnJvdGF0ZSgxMGRlZyl9fUBtZWRpYSAobWF4LXdpZHRoOjUwMHB4KXsuZ2l0aHViLWNvcm5lcjpob3ZlciAub2N0by1hcm17YW5pbWF0aW9uOm5vbmV9LmdpdGh1Yi1jb3JuZXIgLm9jdG8tYXJte2FuaW1hdGlvbjpvY3RvY2F0LXdhdmUgNTYwbXMgZWFzZS1pbi1vdXR9fTwvc3R5bGU+DQoNCjxzY3JpcHQ+DQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQogICAgJCgncHJlLnInKS5hZGRDbGFzcygnaW5kZW50Jyk7DQogICAgJCgncCcpLmFkZENsYXNzKCdpbmRlbnQnKTsNCn0pOw0KPC9zY3JpcHQ+DQoNCjxzdHlsZT4NCi5pbmRlbnQgew0KIG1hcmdpbi1sZWZ0OiAzMHB4Ow0KfQ0KPC9zdHlsZT4NCg0KJm5ic3A7